<?php
if(file_exists(COMMON_PATH . 'Common/base.function.php')) include_once COMMON_PATH . 'Common/base.function.php';

if(!function_exists("array_column")){
    /**
     * 当PHP 5 < 5.5.0时，PHP默认不支持，返回数组中指定的一列
     * @param array  $input            来源数组
     * @param string $column_name      选中列键值
     * @param string $index_key        作为新数组键值
     * @return multitype:| array
     */
    function array_column($input, $column_name, $index_key = null) {
        $columnKeyIsNumber = (is_numeric($column_name)) ? true : false;
        $indexKeyIsNull = (is_null($index_key)) ? true : false;
        $indexKeyIsNumber = (is_numeric($index_key)) ? true : false;
        $result = array();
        foreach ((array) $input as $key => $row) {
            if ($columnKeyIsNumber) {
                $tmp = array_slice($row, $column_name, 1);
                $tmp = (is_array($tmp) && !empty($tmp)) ? current($tmp) : null;
            } else {
                $tmp = isset($row[$column_name]) ? $row[$column_name] : null;
            }
            if (!$indexKeyIsNull) {
                if ($indexKeyIsNumber) {
                    $key = array_slice($row, $index_key, 1);
                    $key = (is_array($key) && !empty($key)) ? current($key) : null;
                    $key = is_null($key) ? 0 : $key;
                } else {
                    $key = isset($row[$index_key]) ? $row[$index_key] : 0;
                }
            }
            $result[$key] = $tmp;
        }
        return $result;
    }
}

/**
 * 验证码验证
 * @author Create by JiRY
 * @param string $code      验证码
 * @param string $id        验证码ID
 * @return boolean
 */
function check_verify($code , $id = ''){
    $verify = new \Think\Verify();
    return $verify->check($code, $id);
}

/**
 * 获取salt值
 * @author Create by JiRY
 * @param integer $length      salt字符长度
 * @return string
 */
function get_salt($length=10){
    $str = null;
    $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
    $max = strlen($strPol)-1;
    srand(microtime()*100000);

    for($i=0;$i<$length;$i++){
        //rand($min,$max)生成介于min和max两个数之间的一个随机整数
        $str.=$strPol[rand(0,$max)];
    }

    return $str;
}

/**
 * 密码加密
 * @author Create by JiRY
 * @param string $user_pass     用户明文密码
 * @param string $encode_salt   密码加密私钥
 * @return boolean
 */
function pass_encode($user_pass,$encode_salt){
    //取密钥最后一个字母，求模。在模的位置插入该字母
    $encode_salt = str_split($encode_salt);
    $num = count($encode_salt);
    foreach($encode_salt as $l){
        $i = ord($l) % $num ;
        $user_pass = substr($user_pass,0,$i) . $l . substr($user_pass,$i) ;
    }
    return md5($user_pass);
}

/**
 * 数据签名
 * @param array $data       签名数据
 * @return string
 */
function make_sign($data=[]){
    import('Sign.Sign', APP_LIBRARY, '.class.php');
    
    $signObj = Sign::instance( C('AUTH_TOKEN') );
    //获取签名数据
    $sign_str   = $signObj->getSignStr( $data );
    //数据签名
    return $signObj->makeSign( $sign_str );
}

/**
 * 签名验证
 * @param string $sign          签名字符串
 * @param array $data           验证数据
 * @return boolean
 */
function verify_sign($sign='', $data=[]){
    import('Sign.Sign', APP_LIBRARY, '.class.php');
    
    unset($data['sign']);
    $signObj = Sign::instance( C('AUTH_TOKEN') );
    $sign_data = $data ? $data : ['salt'=>C('SALT')];
    
    // 验证签名
    return $signObj->verifySign($sign, $sign_data);
}